#ifndef __APP_LUMBARSUPORT_H__
#define __APP_LUMBARSUPORT_H__

#include "Common_Config.h"
#include "Driver_BSTIM32.h"
#include "Inf_Pump.h"
#include "Inf_SolenoidValve.h"

#define LUMBAR_SUPPORT_MAXSIZE   3
#define FULL_PRESSURE_TIME_VALUE 100 // 满气压时充气时间(单位 100ms)

/* 腰托索引枚举 */
typedef enum
{
    YT_INDEX_UP,

    YT_INDEX_MIDDLE,

    YT_INDEX_DOWN,

    YT_INDEX_MAXSIZE

} YTIndex_e;

/* 腰托当前状态枚举 */
typedef enum
{
    /* 空闲 */
    YT_STATE_IDLE,

    /* 充气 */
    YT_STATE_INFLATION,

    /* 泄气 */
    YT_STATE_DEFLATION

} YTState_e;

/* 腰托结构体 */
typedef struct
{
    /* 腰托当前状态 */
    YTState_e state;

    /* 已充气时间 */
    uint8_t inflatedTime;

    /* 充满气压的值 */
    uint8_t fullPressure;

} LumbarSupport;

extern LumbarSupport lumbarSupports[LUMBAR_SUPPORT_MAXSIZE];

/**
 * @brief 初始化腰托
 */
void App_LumbarSupport_Init(void);

/**
 * @brief 设置指定腰托为充气状态并执行充气
 *
 * @param YTIndex 腰托索引
 */
void App_LumbarSupport_StartInflation(YTIndex_e YTIndex);

/**
 * @brief 设置指定腰托为泄气状态并执行泄气
 *
 * @param YTIndex 腰托索引
 */
void App_LumbarSupport_StartDeflation(YTIndex_e YTIndex);

/**
 * @brief 设置指定腰托为充气状态
 *
 * @param YTIndex 腰托索引
 */
void App_LumbarSupport_AirInflation(YTIndex_e YTIndex);

/**
 * @brief 设置指定腰托为泄气状态
 *
 * @param YTIndex 腰托索引
 */
void App_LumbarSupport_AirDeflate(YTIndex_e YTIndex);

/**
 * @brief 所有腰托停止运行
 */
void App_LumbarSupport_AllYTValvesStopped(void);

/**
 * @brief 中间腰托充气，上下泄气
 */
void App_LumbarSupport_PrevAdjust(void);

/**
 * @brief 上部腰托充气，中下泄气
 */
void App_LumbarSupport_UpAdjust(void);

/**
 * @brief 下部腰托充气，中上泄气
 */
void App_LumbarSupport_DownAdjust(void);

/**
 * @brief 所有腰托泄气
 */
void App_LumbarSupport_BehindAdjust(void);

#endif
